package org.example.aiservice.service;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.*;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

/**
 * 阿里云百炼千问Plus AI服务
 */
@Service
public class AlibabaAiService {

    @Value("${alibaba.ai.api.url}")
    private String apiUrl;

    @Value("${alibaba.ai.api.key}")
    private String apiKey;

    @Value("${alibaba.ai.api.model}")
    private String model;

    private final RestTemplate restTemplate = new RestTemplate();

    /**
     * 调用阿里云百炼千问Plus API
     * @param question 用户问题
     * @param fileContent 文件内容（作为上下文）
     * @return AI回答
     */
    public String chat(String question, String fileContent) {
        try {
            // 构建请求体（OpenAI兼容格式）
            JSONObject requestBody = new JSONObject();
            requestBody.put("model", model);
            
            // 构建消息数组
            JSONArray messages = new JSONArray();
            
            // 系统消息（包含文件内容作为上下文）
            if (fileContent != null && !fileContent.trim().isEmpty()) {
                JSONObject systemMessage = new JSONObject();
                systemMessage.put("role", "system");
                systemMessage.put("content", "你是一个智能文档助手。请基于以下文档内容回答用户的问题：\n\n" + fileContent);
                messages.add(systemMessage);
            }
            
            // 用户消息
            JSONObject userMessage = new JSONObject();
            userMessage.put("role", "user");
            userMessage.put("content", question);
            messages.add(userMessage);
            
            requestBody.put("messages", messages);
            
            // OpenAI兼容格式的参数（直接放在请求体根级别）
            requestBody.put("max_tokens", 2000);
            requestBody.put("temperature", 0.7);

            // 设置请求头
            HttpHeaders headers = new HttpHeaders();
            headers.setContentType(MediaType.APPLICATION_JSON);
            headers.set("Authorization", "Bearer " + apiKey);

            HttpEntity<String> entity = new HttpEntity<>(requestBody.toJSONString(), headers);

            // 发送请求
            ResponseEntity<String> response = restTemplate.postForEntity(apiUrl, entity, String.class);

            if (response.getStatusCode() == HttpStatus.OK) {
                JSONObject responseJson = JSON.parseObject(response.getBody());
                
                // 解析OpenAI兼容格式的响应
                JSONArray choices = responseJson.getJSONArray("choices");
                if (choices != null && choices.size() > 0) {
                    JSONObject firstChoice = choices.getJSONObject(0);
                    JSONObject message = firstChoice.getJSONObject("message");
                    if (message != null) {
                        String content = message.getString("content");
                        return content != null ? content : "抱歉，AI服务暂时无法处理您的请求。";
                    }
                }
            }

            return "抱歉，AI服务调用失败，请稍后重试。";

        } catch (Exception e) {
            e.printStackTrace();
            return "抱歉，处理您的请求时发生错误：" + e.getMessage();
        }
    }

    /**
     * 简单聊天（不基于文档内容）
     * @param question 用户问题
     * @return AI回答
     */
    public String simpleChat(String question) {
        return chat(question, null);
    }
}